package com.lyr.tranfimg.util;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.StandardCopyOption;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * @author liyiruo
 * @Description
 * @Date 2024/10/29 17:47
 */
public class MyUtil {

    private static final Logger logger= LoggerFactory.getLogger(MyUtil.class);
    /**
     * @param rootPath 源目录
     * @param fileName 文件名称
     * @return String 文件的全路径
     */
    public static String findFileFullPath(String rootPath, String fileName) {

        String path=null;
        File directory = new File(rootPath);
        // 检查目录是否存在且是一个目录
        if (!directory.exists() || !directory.isDirectory()) {
            logger.info("目录【{}】不存在或不是一个有效的目录",rootPath);
            return null;
        }
        // 获取目录下的所有文件和子目录
        File[] files = directory.listFiles();
        // 遍历文件和子目录
        if (files != null) {
            for (File file : files) {
                // 检查文件名是否匹配
                if (file.isFile()) {
                    if (file.getName().equals(fileName)) {
                        path= file.getAbsolutePath();
                        break;
                    }
                }
            }
        }

        // 文件不存在
        return path;
    }
    /**
     * 安排一个任务在指定的延迟后删除文件。
     *
     * @param file     要删除的文件
     * @param delay    延迟时间（秒）
     */
    public static void scheduleFileDeletion(File file, long delay) {
        // 创建一个单线程的定时任务执行器
        ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();

        // 安排一个任务在延迟后执行
        scheduler.schedule(() -> {
            if (file.exists()) {
                if (file.delete()) {
                    logger.info("文件【{}】已删除",file.getAbsoluteFile());
                } else {
                    logger.info("无法删除文件【{}】",file.getAbsoluteFile());
                }
            } else {
                logger.info("文件【{}】在删除前已不存在",file.getAbsoluteFile());
            }
            // 关闭定时任务执行器（注意：这将在所有任务完成后关闭它，但在这个例子中我们只有一个任务）
            scheduler.shutdown();
        }, delay, TimeUnit.SECONDS);
    }

    /**
     * 根据id获取到文件路径，指定间隔后删除此路径文件
     *
     * @param res  源文件位置
     * @param dest 目标位置
     */
    public static boolean copy(String res, String dest) {

        Path source = Paths.get(res);
        Path target = Paths.get(dest);
        try {
            // 检查源文件是否存在
            if (!Files.exists(source)) {
                logger.info("源文件[{}]不存在",source);
            }
            // 执行文件复制操作
            Files.copy(source, target, StandardCopyOption.REPLACE_EXISTING);
            logger.info("文件从【{}】复制到【{}】成功",source,target);
            return true;
        } catch (IOException e) {
            logger.info("文件从【{}】复制到【{}】失败",source,target);
            return false;
        }

    }

}
